﻿#region License
/*
 * Copyright ©2011-2012 EasyMon Project
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *  
 */
#endregion

using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;
using EasyMon.Common.Sources;
using EasyMon.Common.Values;
using EasyMon.Win.Agent.Extensions;

namespace EasyMon.Win.Agent
{
    public class MachineAgent : IMachineAgent
    {
        public ProcessValue[] QueryProcesses(ProcessSource[] processes)
        {
            if (processes == null || processes.Length == 0)
                return new ProcessValue[0];

            var list = new ConcurrentBag<ProcessValue>();

            Parallel.ForEach(processes, x => list.Add(x.Query()));

            return list.OrderBy(x => x.DisplayName).ToArray();
        }

        public PerfCounterValue[] QueryPerfCounters(PerfCounterSource[] counters)
        {
            if (counters == null || counters.Length == 0)
                return new PerfCounterValue[0];

            var list = new ConcurrentBag<PerfCounterValue>();

            Parallel.ForEach(counters, x => list.Add(x.Query("")));

            return list.OrderBy(x => x.DisplayName).ToArray();
        }
    }
}
